package com.wande.dataplatform.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.domain.bo.DataTagBo;
import com.wande.dataplatform.domain.dto.TagRelationDTO;
import com.wande.dataplatform.domain.dto.TagStatisticsDTO;
import com.wande.dataplatform.domain.vo.DataTagVO;

import java.util.List;

/**
 * 数据标签服务接口
 *
 * @author wande
 */
public interface IDataTagService {

    /**
     * 查询标签树
     */
    List<DataTagVO> selectTagTree(Long projectId);

    /**
     * 查询标签列表
     */
    TableDataInfo<DataTagVO> selectTagList(DataTagBo bo, PageQuery pageQuery);

    /**
     * 查询标签详情
     */
    DataTagVO selectTagById(Long id);

    /**
     * 创建标签
     */
    Long createTag(DataTagBo bo);

    /**
     * 更新标签
     */
    Boolean updateTag(DataTagBo bo);

    /**
     * 删除标签
     */
    Boolean deleteTag(Long id);

    /**
     * 批量删除标签
     */
    Boolean deleteTags(List<Long> ids);

    /**
     * 为资产添加标签
     */
    Boolean addTagsToAsset(TagRelationDTO dto);

    /**
     * 移除资产标签
     */
    Boolean removeTagsFromAsset(Long assetId, String assetType, List<Long> tagIds);

    /**
     * 查询资产的标签列表
     */
    List<DataTagVO> selectTagsByAsset(Long assetId, String assetType);

    /**
     * 自动打标签
     */
    Boolean autoTagAsset(Long assetId, String assetType);

    /**
     * 查询标签统计信息
     */
    List<TagStatisticsDTO> selectTagStatistics();

    /**
     * 更新标签使用次数
     */
    void incrementUsageCount(Long tagId);
}
